package fr.lna.chess.ui;

import javax.swing.Action;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import fr.lna.chess.ui.type.ACTION_APP;
import fr.lna.chess.util.Message;
import fr.lna.util.MessageTools;

/**
 * Classe pour la gestion du menu.
 * Utilisation du service de message et du service d'action/
 * 
 * @author bull
 *
 */
@Component
public class Menu {

	private JMenuBar menu;

	@Autowired
	@Qualifier("message.source")
	private Message messageSource;

	@Autowired
	@Qualifier("action.service")
	private ActionService actionService;

	/**
	 * Renvoi une référence vers la barre de menu.
	 * 
	 * @return Barre de menu.
	 */
	@Bean
	@Qualifier("bar.menu")
	public JMenuBar getMenuBar() {
			menu = new JMenuBar();

			final JMenu menuFichier = new JMenu(
					messageSource.getMessage("menu.file.name"));
			menuFichier.setMnemonic(12);

			menuFichier.add(getMenuItem(ACTION_APP.RESET_ACTION));
			menuFichier.addSeparator();
			menuFichier.add(getMenuItem(ACTION_APP.LOAD_GAME_ACTION));
			menuFichier.add(getMenuItem(ACTION_APP.SAVE_GAME_ACTION));
			menuFichier.add(getMenuItem(ACTION_APP.SAVE_GAME_AS_ACTION));
			menuFichier.addSeparator();
			menuFichier.add(getMenuItem(ACTION_APP.PRINT_ACTION));
			menuFichier.addSeparator();
			menuFichier.add(getMenuItem(ACTION_APP.LOAD_POSITION_ACTION));
			menuFichier.add(getMenuItem(ACTION_APP.SAVE_POSITION_ACTION));
			menuFichier.add(getMenuItem(ACTION_APP.SAVE_POSITION_AS_ACTION));
			menuFichier.addSeparator();
			menuFichier.add(getMenuItem(ACTION_APP.EXIT_ACTION));

			menu.add(menuFichier);

			final JMenu menuEdition = new JMenu(
					messageSource.getMessage("menu.edit.name"));
			menuEdition.setMnemonic(messageSource
					.getFirstChar("menu.edit.mnemonic"));
			
			 menuEdition.add(getMenuItem(ACTION_APP.COPY_ACTION));
			 menuEdition.add(getMenuItem(ACTION_APP.PASTE_ACTION));
			
			menu.add(menuEdition);

			final JMenu menuAide = new JMenu(
					messageSource.getMessage("menu.help.name"));
			menuAide.setMnemonic(messageSource
					.getFirstChar("menu.help.mnemonic"));
			
			 
			 menuAide.add(getMenuItem(ACTION_APP.HELP_ACTION));
			 menuAide.addSeparator();
			 menuAide.add(getMenuItem(ACTION_APP.ABOUT_ACTION));

			 menu.add(menuAide);
			menu.setVisible(true);

		return menu;
	}

	/**
	 * Construction de l'item de menu
	 * 
	 * @param resetAction
	 * @return
	 */
	private JMenuItem getMenuItem(ACTION_APP actionName) {
		JMenuItem item = new JMenuItem();
		String texte = messageSource.getMessage(MessageTools.genCode(actionName,
		"menu"));
		item.setText(texte);
		Action action = actionService.getAction(actionName);
		action.setEnabled(true);
		item.setAction(action);
		return item;
	}
}
